package org.svnadmin.service;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.svnadmin.dao.PjAuthDao;
import org.svnadmin.dao.PjGrDao;
import org.svnadmin.dao.PjGrUsrDao;
import org.svnadmin.entity.PjGr;

import javax.annotation.Resource;
import java.util.List;

/**
 * 项目组服务层
 *
 * @author <a href="mailto:yuanhuiwu@gmail.com">Huiwu Yuan</a>
 * @since 1.0
 */
@Service(PjGrService.BEAN_NAME)
public class PjGrService {
    /**
     * Bean名称
     */
    public static final String BEAN_NAME = "pjGrService";

    /**
     * 项目组DAO
     */
    @Resource(name = PjGrDao.BEAN_NAME)
    protected PjGrDao pjGrDao;

    /**
     * 项目组用户DAO
     */
    @Resource(name = PjGrUsrDao.BEAN_NAME)
    protected PjGrUsrDao pjGrUsrDao;

    /**
     * 项目权限DAO
     */
    @Resource(name = PjAuthDao.BEAN_NAME)
    protected PjAuthDao pjAuthDao;

    /**
     * SVN服务层
     */
    @Resource(name = SvnService.BEAN_NAME)
    protected SvnService svnService;

    /**
     * @param pj 项目
     * @param gr 组
     * @return 项目组
     */
    public PjGr get(String pj, String gr) {
        return pjGrDao.get(pj, gr);
    }

    /**
     * @param pj 项目
     * @return 项目组列表
     */
    public List<PjGr> list(String pj) {
        return pjGrDao.getList(pj);
    }

    /**
     * 删除项目组(同时删除项目组的权限，项目组的用户)
     *
     * @param pj 项目
     * @param gr 组
     */
    @Transactional
    public void delete(String pj, String gr) {
        pjAuthDao.deletePjGr(pj, gr);
        pjGrUsrDao.deletePjGr(pj, gr);
        pjGrDao.delete(pj, gr);

        svnService.exportConfig(pj);
    }

    /**
     * 保存
     *
     * @param pjGr 项目组
     */
    @Transactional
    public void save(PjGr pjGr) {
        pjGrDao.save(pjGr);
        svnService.exportConfig(pjGr.getPj());
    }
}
